import axios from 'axios';
import { Message, MessageBox } from 'element-ui';
import store from '@/store';
import { getToken } from '@/utils/auth';
import { decryptStr, encryptParams } from "./aesUtils";

function getApiHost() {
  let hostname = window.location.hostname;
  switch (hostname) {
    case 'localhost':
      // window.API_BASE_URI = 'http://localhost:9529';
      // window.WS_BASE_URI = 'ws://localhost:9529';
      window.API_BASE_URI = 'https://aistock.nervenets.cn';
      window.WS_BASE_URI = 'wss://aistock.nervenets.cn';
      window.responseEncrypt = false;
      window.requestEncrypt = true;
      window.tokenEncrypt = true;
      break;
    case 'stock-ai-pc.nervenets.cn':
      window.API_BASE_URI = 'https://aistock.nervenets.cn';
      window.WS_BASE_URI = 'wss://aistock.nervenets.cn';
      window.responseEncrypt = false;
      window.requestEncrypt = true;
      window.tokenEncrypt = true;
      break;
    case 'aistock.nervenets.cn':
      window.API_BASE_URI = 'https://aistock.nervenets.cn';
      window.WS_BASE_URI = 'wss://aistock.nervenets.cn';
      window.responseEncrypt = false;
      window.requestEncrypt = true;
      window.tokenEncrypt = true;
      break;
    default:
      alert('您使用的环境不合法');
      window.close();
      break;
  }
  return window.API_BASE_URI;
}

// create an axios instance
const service = axios.create({
  // baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  baseURL: getApiHost(), // url = base url + request url
  // baseURL: window.API_BASE_URI_CRM, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 10 * 60 * 1000 // request timeout
});

// request interceptor
service.interceptors.request.use(
  config => {
    // do something before request is sent
    // if (store.getters.token) {
    //   // let each request carry token
    //   // ['X-Token'] is a custom headers key
    //   // please modify it according to the actual situation
    //   config.headers['X-Token'] = getToken()
    // }
    config.headers['Content-Type'] = "application/json";
    config.headers['User-Platform'] = "management";
    if (store.getters.token) {
      config.headers['User-Token'] = window.tokenEncrypt ? encryptParams(getToken()) : getToken();
    }
    if (window.requestEncrypt) {
      config.data = encryptParams(config.data);
    }
    //console.log(config);
    return config;
  },
  error => {
    // do something with request error
    console.log(error); // for debug
    return Promise.reject(error);
  }
);

// response interceptor
service.interceptors.response.use(
  /**
   * If you want to get http information such as headers or status
   * Please return  response => response
   */

  /**
   * Determine the request status by custom code
   * Here is just an example
   * You can also judge the status by HTTP Status Code
   */
  response => {
    let res = response.data;
    // let staticRes = JSON.stringify(response.data);
    console.log(response.headers["content-type"]);
    if (String(response.headers["content-type"]).indexOf("csv") !== -1) {
      return res;
    }
    if (window.responseEncrypt) {
      res = decryptStr(response.data);
    }
    //console.log(res)
    if (response.status !== 200) {
      Message({
        message: res.message || 'Error',
        type: 'error',
        duration: 5 * 1000
      });
      if (res.status === 777 || res.status === 778 || res.status === 401) {
        // to re-login
        MessageBox.confirm('登录过期，请重新登录', '提示', {
          confirmButtonText: '确定',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload();
          });
        });
      }
    }

    return res;
  },
  error => {
    let res = error.response.data;
    if (window.responseEncrypt) {
      res = decryptStr(error.response.data);
    }
    console.log(res);
    Message({
      message: res.message,
      type: 'error',
      duration: 5 * 1000
    });
    if (error.response.status === 777 || error.response.status === 778 || error.response.status === 401) {
      // to re-login
      MessageBox.confirm('登录过期，请重新登录', '提示', {
        confirmButtonText: '确定',
        type: 'warning'
      }).then(() => {
        store.dispatch('user/resetToken').then(() => {
          location.reload();
        });
      });
    }
    return Promise.reject(res);
  }
);

export default service;
